// PROGRAMA : CTLPA005
// BIBLIOTECA : PRODETR
// SISTEMA : INFORMACOES DE SEGURANCA PUBLICA - SISP
// CLIENTE : SEJUSP - SEC. DA JUSTICA E SEGURANCA PUBLICA
// INSTITUTO DE IDENTIFICACAO
// PROGRAMADOR : EDU/FM DATA:
// OBJETIVO : ATUALIZAR CANCELAMENTO DE DOCS. P/INTERVALO. 'AID'
// ATUALIZACOES DATA
// PROGRAMA : CTLPA005 07/11/1997
// BIBLIOTECA : SISP
// PROGRAMADOR :
// OBJETIVO : ADAPTACAO PARA O SHOPPING DO CIDADAO (P200)
// : ALTERACAO DE TELA 29/09/1999
// : ALTERACAO DOS CAMPOS DE DATA (N6) PARA (N8)
// OBS : ESTE PROGRAMA FOI REESTRUTURADO POR SOLON MIRANDA

package br.com.vti.sisp_sicrim.antigo.controller.programa;

import br.com.caelum.vraptor.Post;
import br.com.caelum.vraptor.Path;
import br.com.caelum.vraptor.Resource;
import br.com.caelum.vraptor.Result;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Ctlpa005A;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Ctlta005;
import br.com.vti.sisp_sicrim.antigo.controller.tela.Sistha02;
import br.com.vti.sisp_sicrim.antigo.model.Estla001;
import br.com.vti.sisp_sicrim.antigo.model.SicControle;
import br.com.vti.sisp_sicrim.antigo.model.SicTabelas;
import br.com.vti.sisp_sicrim.antigo.util.ExceptionProgram;
import br.com.vti.sisp_sicrim.antigo.util.Sessao;
import br.com.vti.sisp_sicrim.antigo.util.Sisgsisp;
import br.com.vti.sisp_sicrim.antigo.util.UtilBean;

/**
 * Classe : Ctlpa005 OBJETIVO : ATUALIZAR CANCELAMENTO DE DOCS. P/INTERVALO. 'AID' *
 * 
 * @author Incode - Data: mai/2014
 * 
 */

@Resource
@Path("/antigo/ctlpa005")
public class Ctlpa005 {
	// Estado Anterior
	Ctlpa005 ctlpa005Anterior;
	// Views utilizadas
	SicControle vwDvecon = new SicControle();
	SicTabelas vwTabele = new SicTabelas();
	// Telas/relatorios utilizados
	Ctlpa005A ctlpa005A;
	Ctlta005 ctlta005;
	Sistha02 sistha02;
	// Includes utilizados
	Estla001 estla001 = new Estla001();
	// Areas globais / session
	Sisgsisp sisgsisp; // Funcoes/subrotinas
	FuncoesGerais funcoes = new FuncoesGerais();

	Result result;
	Sessao sessao;
	Boolean primeiraVez = false;
	// private String chave;
	// private long ndemid;
	// private int datemi;
	// private int tipdoc;
	// private String nomdoc;
	// private String observ;
	private int datn;
	// private int tido;
	// private long inicio;
	// private long wfinal;
	// private String nomeClasse = this.getClass().getSimpleName();
	// private int dataCorrente;
	private String faseproc = "0"; // SETA PF'S

	private Ctlta005 preMapas() {
		ctlpa005A = new Ctlpa005A(true, sessao);
		ctlta005 = new Ctlta005(true, sessao);
		sistha02 = new Sistha02(true, sessao);
		ctlta005.setDataCorrente(UtilBean.inverteDataCorrente());
		ctlta005.setNomeClasse(this.getClass().getSimpleName().toUpperCase());
		datn = UtilBean.obtemDataCorrente();
		estla001.esttip = 99;
		estla001.qde = 1;
		estla001.cpo = sessao.getSisgsisp().getVlt();
		return ctlta005;
	}

	public Ctlpa005(Result result, Sessao sessao) {
		this.result = result;
		this.sessao = sessao;
	}

	@Post
	public void executar(Ctlta005 ctlta005, Ctlpa005A ctlpa005A, Sistha02 sistha02) {
		try {
			main(ctlta005, ctlpa005A, sistha02);
		} catch (Exception e) {
			ExceptionProgram excp = new ExceptionProgram();
			excp.trataErroSiscerro(e, sessao, this.getClass().getSimpleName());
		}
	}

	private void main(Ctlta005 pctlta005, Ctlpa005A pctlpa005A, Sistha02 psistha02) {
		if (pctlta005 == null && pctlpa005A == null && psistha02 == null) {
			primeiraVez = true;
			// ctlta005 = new Ctlta005 (primeiraVez);
			ctlta005 = preMapas();
			ctlta005.setNavegar("../ctlpa005/executar");
			result.include("ctlta005", ctlta005);
			ctlta005.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
			sessao.setAtributo("CTLPA005", this);
			return;
		} else {
			restaurarEstados(pctlta005, pctlpa005A, psistha02);
		}

		switch (faseproc) {
		case "0": {
			ctlta005.receberTela(false, result);
			if (!ctlta005.getOperacao().equals("AID")) {
				saida();
				return;
			}

			if (!UtilBean.funcao.equals(UtilBean.ctt_confirma)) {
				ctlta005.enviarMensagem(null, "TECLE �PF5� PARA ATUALIZAR");
				sessao.setAtributo("CTLPA005", this);
				result.include("ctlta005", ctlta005);
				ctlta005.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
				return;
			}

			sessao.setAtributo("CTLPA005", this);
			result.include("sistha02", sistha02);
			sistha02.enviarTela(false, result, getClass().getSimpleName().toUpperCase());
			faseproc = "1";
			return;
		}
		case "1": {
			sistha02.receberTela(false, result);
			if (UtilBean.funcao.equals(UtilBean.ctt_retorna)) {
				this.ctlta005.setMensagemSaida("ALTERACAO NAO FOI EXECUTADA");
				break;
			}

			if (UtilBean.funcao.equals(UtilBean.ctt_confirma)) {

				funcoes.tabsatu(sessao);
				if (!funcoes.camret.equals("")) {
					this.ctlta005.enviarMensagem(funcoes.camret, "");
					sessao.setAtributo("CTLPA005", this);
					result.include("ctlta005", ctlta005);
					ctlta005.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
					return;
				}

				this.ctlta005.setMensagemSaida("CANCELAMENTO EFETUADO OK.");
			}

			this.ctlpa005A.setNdemid(this.ctlta005.getInicio());

			for (long ind = this.ctlta005.getInicio(); ind <= this.ctlta005.getWfinal(); ind++) {
				this.ctlpa005A.setNdemid(ind);

				// ctlpa005A.enviarReceberTela(false, result);
				vwDvecon.pesquisaNumeroDocumentoTipoDocumentoIn(ind, 88, 87);
				if (vwDvecon.registrosProcessados() == 0) {
					vwDvecon.fecha();
					vwDvecon.setNumeroDocumento(this.ctlpa005A.getNdemid());
					vwDvecon.setTipoDocumento(87);
					vwDvecon.setMatriculaFunc(sessao.getSisgsisp().getMatric());
					vwDvecon.setEnderecoRequerente(this.ctlta005.getObserv());
					vwDvecon.setDataEmissao(datn);
					vwDvecon.grava();
					// //dao.commit();
				}

			}
			faseproc = "0";
			break;
		}
		}

		sessao.setAtributo("CTLPA005", this);
		result.include("ctlta005", ctlta005);
		ctlta005.enviarTela(primeiraVez, result, getClass().getSimpleName().toUpperCase());
	}

	// IF *PF-KEY NE 'PF3'
	// CALLNAT 'ESTNA001' CPO ESTTIP QDE VLT MATRIC
	// END-IF

	private void saida() {

		// CHAMA PROGRAMA DE ACORDO COM OPERACAO
		funcoes.sissm001(result, sessao);
	}

	private void restaurarEstados(Ctlta005 pctlta005, Ctlpa005A pctlpa005A, Sistha02 psistha02) {
		this.ctlpa005Anterior = (Ctlpa005) sessao.getAtributo("CTLPA005");
		if (pctlta005 != null) {
			ctlta005 = pctlta005;
		} else {
			ctlta005 = this.ctlpa005Anterior.ctlta005;
		}
		ctlta005.setSessao(sessao);
		if (pctlpa005A != null) {
			ctlpa005A = pctlpa005A;
		} else {
			ctlpa005A = this.ctlpa005Anterior.ctlpa005A;
		}
		ctlpa005A.setSessao(sessao);
		if (psistha02 != null) {
			sistha02 = psistha02;
		} else {
			sistha02 = this.ctlpa005Anterior.sistha02;
		}
		sistha02.setSessao(sessao);
		this.faseproc = this.ctlpa005Anterior.faseproc;
	}
}
